#include <iostream>
#include <unistd.h>
#include <signal.h>
using namespace std;

// void handler(int signo)
// {
//     cout << "处理信号signo: " << signo << endl;
// }

// void showPending()
// {
//     sigset_t set;
//     sigemptyset(&set);
//     // 查看pending
//     sigpending(&set);
//     for (int i = 31; i >= 1; i--)
//     {
//         if (sigismember(&set, i))
//             cout << "1";
//         else
//             cout << "0";
//     }
//     cout << endl;
// }

// int main()
// {
//     // cout << getpid() << endl;
//     // // // 先绑定信号SIGSEGV的处理方法
//     // // signal(SIGSEGV, handler);

//     // // 发生野指针错误
//     // int *p = nullptr;
//     // *p = 10;

//     // // // 打印一句话，看看程序能否运行到这
//     // // cout << "野指针错误" << endl;

//     signal(SIGINT, handler);
//     signal(SIGQUIT, handler);

//     sigset_t set, oset;
//     sigemptyset(&set);
//     sigaddset(&set, SIGINT);
//     sigaddset(&set, SIGQUIT);

//     // 设置block，以便观察
//     sigprocmask(SIG_SETMASK, &set, &oset);

//     int cnt = 0;
//     while (true)
//     {
//         if (cnt++ == 10)
//         {
//             // 解除2、3号信号的阻塞
//             sigprocmask(SIG_UNBLOCK, &set, &oset);
//         }

//         // 查看pending
//         showPending();

//         sleep(1);
//     }

//     return 0;
// }

volatile int quit = 0;

void handler(int signo)
{
    cout << "处理信号signo: " << signo << " quit已修改为1" << endl;
    quit = 1;
}

int main()
{
    signal(SIGINT, handler);

    while (!quit);

    cout << "quit" << endl;
    return 0;
}